home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
newmake.arc
/
MAKE.MAN
< prev
next >
Wrap
Text File
|
1986-09-21
|
8KB
|
297 lines
MAKE(I) 3/10/84 MAKE(I)
NAME
MAKE - maintain multiple source files (VAX/VMS and MSDOS 2.0)
SYNOPSIS
MAKE [-N] [-A] [-F makefile] [name ...]
DESCRIPTION
MAKE is a utility inspired by the Unix(tm) command of the same
name. MAKE helps maintain programs that are constructed from
many files. MAKE processes a "makefile", a file which describes
how to build a program from its source files, and produces a
script file containing the commands necessary to recompile the
program.
Be careful: this MAKE is NOT compatible with Unix(tm) MAKE!
The 'N' option causes MAKE to print out the steps it would follow
in order to rebuild the program. The 'A' option tells MAKE to
assume that all files are obsolete, and that everything should be
recompiled. The 'F' option, followed by a filename, can be used
to specify a makefile other than the default one.
If no names are specified in the commandline, the first dependency
in the makefile is examined. Otherwise, the specified root names
are brought up to date.
The default makefiles are:
for VAX/VMS: MAKEFILE
[-]MAKEFILE
SYS$LOGIN:MAKEFILE
for MSDOS: MAKEFILE
..\MAKEFILE
If the first makefile cannot be found, MAKE attempts to use the
next one. If no makefile is ever found, MAKE prints a diagnostic
and aborts.
THE MAKEFILE
Comments begin with '!' and extend to the end of the line. A
'!' (or almost any other character) may be escaped with the escape
character (backslash (\) on VMS, backquote (`) on MSDOS). An escape
character may be typed by doubling it (\\ or ``). The standard
Unix escape codes are recognized (\n, \r, \t, \b, \f, `n, `r, `t,
`b and `f).
A makefile is a list of dependencies. A dependency consists of
a root name, a colon, and zero or more names of dependent files.
(The colon MUST be preceeded by whitespace.) For instance, in:
make.exe : make.obj parsedir.obj file.obj macro.obj mk.h
the file 'make.exe' depends on five other files. A root name
with an empty dependency, as in:
print :
is assumed NEVER up to date, and will always be recompiled.
The dependency list may be continued on successive lines:
bigfile.exe : one.obj two.obj three.obj four.obj
five.obj six.obj gronk.obj freeple.obj scuzzy.lnk
frog.txt greeble.out
Any number of 'method' lines may follow a dependency. Method lines
begin with an ascii tab. When a file is to be recompiled, MAKE
copies these method lines (minus the tab) to the script file.
For example, in:
make.exe : make.obj parsedir.obj file.obj macro.obj mk.h
$link make, parsedir, file, macro
$write sys$output "Just another version of MAKE ..."
$purge
the three lines following the dependency make up the method for
recompiling (or in this case, re-linking) the file 'make.exe'.
If the macro "~INIT" is defined, its text will appear first in the
script file. If the macro "~DEINIT" is defined, its text will
appear last in the script file. By defining these two macros, it
is possible to configure the shell enviroment:
~INIT = $set term/nowrap\n$on error then goto err_handler
~DEINIT = $set term/wrap\n$exit\$err_handler:\n
~DEINIT = #(~DEINIT)$type err.log\n$exit
will expand (in the script file) to:
$set term/nowrap
$on error then goto err_handler
.
.
$set term/wrap
$exit
$err_handler:
$type err.log
$exit
When a root's method is defined, the value of the macro "~BEFORE"
is prefixed to the method, and the value of the macro "~AFTER" is
appended to it.
Frequently one wants to maintain more than one program with a single
makefile. In this case, a "master dependency" can appear first in
the file:
allOfMyToolsAndHorribleHacks : cat peek poke.exe grunge
cat : cat.exe
cat.exe : ....
(stuff for CAT.EXE)
peek : peek.exe
peek.exe : (stuff for PEEK.EXE)
poke.exe : (stuff for POKE.EXE)
grunge : grunge.com
grunge.com : (stuff for grung)
In other words, make will bring everything up to date that is somehow
connected to the first dependency (its assumed that the incredibly
lengthy filename specified in this example won't actually exist).
MACROS
A macro is defined by a line of the form (the '=' MUST be surrounded
by whitespace):
<macro-name> = <macro-body>
A macro may be deleted by assigning an empty value to it. Macros
may be redefined, but old definitions stay around. If a macro is
redefined, and the redefinition is later deleted, the first definition
will take effect:
MAC = first ! MAC = "first"
MAC = second ! MAC = "second"
MAC = #(MAC) third ! MAC = "second third"
MAC = ! MAC = "second"
MAC = ! MAC = "first"
MAC = ! MAC has no definition
A macro may be referenced in two ways:
#<char> or #(macro-name)
The first way only works if the macro's name is a single character.
If the macro's name is longer than one character, it must be
enclosed in parenthesis. ['#' may be escaped by doubling it ("##".)]
For example, in:
G = mk.h mk1.h
OBJS = make.obj file.obj parsedir.obj macro.obj
BOTH = #(OBJS) #G
make.exe : #(OBJS) #G
make.exe : #(BOTH)
make.exe : mk.h mk1.h make.obj file.obj parsedir.obj macro.obj
$write sys$output "This is a number sign --> ##"
after macro expansion, the three dependencies will appear identical
and the two '#'s in the last line will turn into one '#'.
UNIX(tm) MAKE AND THIS ONE
They are NOT the same. Do not expect Unix makefiles to work with
this MAKE, even if you change the pathnames. There are some major
differences between this version and the standard Unix(tm) MAKE:
1. The Unix(tm) comment character is '#', VAX/VMS's is '!'.
2. The Unix(tm) macro-expansion character is '$'. While this would
have been easy to leave the same, the '$' character is used so
often in VAX/VMS command-lines that I thought it best to change
it to '#'.
3. Multiple root names are not allowed. Unix(tm) MAKE accepts lines
of the form:
name1 name2 : depend1 depend2
but this one doesn't.
4. There is no equivalent of double-colon ("::".)
5. There is no equivalent of .SUFFIXES, or the corresponding special
macros.
SAMPLE MAKEFILE
!
! VAX/VMS MAKE
! Landon Dyer
!
H = make.h
FILES = #H, make.c, macro.c, token.c, parsedir.c, file.c
DOCUMENTATION = distr.mem make.man makefile. make.com
make.exe : make.obj macro.obj token.obj parsedir.obj file.obj
$link make.obj, macro, token, parsedir, file
$purge
make.obj : make.c #H
$cc make.c
macro.obj : macro.c #H
$cc macro
token.obj : token.c #H
$cc token
parsedir.obj : parsedir.c #H
$cc parsedir
file.obj : file.c
$cc file
!
! Print files associated with MAKE
!
print :
$print make.man, #(FILES), make.com, makefile.
!
! Type out source to MAKE
!
type :
$type #(FILES), make.com, makefile.
!
! Make backup of source files.
!
BACKUP = [.bak]
backup :
$copy #(FILES) #(BACKUP)
$copy make.man, make.com, makefile. #(BACKUP)
!
! Collect MAKE into a distribution file.
!
collect :
$collect collect distr.mem make.man makefile make.com make.h -
make.c macro.c token.c parsedir.c file.c
AUTHOR
Landon Dyer G.DYER@SU-SCORE.ARPA
175 Calvert Dr. #F-211 BASHFL::DYER (Atari Coinop)
Cupertino, CA 95014